#include <stdio.h>
#include <stdlib.h>

/*
 * JNI调用原理
 * */

// 定义结构体指针别名
typedef const struct JNINativeInterface *JNIEnv;

// 定义个结构体
struct JNINativeInterface{
	// 定义结构体方法指针
	char*(*NewStringUTF)(JNIEnv*,char*);
};

char* NewStringUTF(JNIEnv *env, char *c_str)
{
	// c_str --> jstring
	return c_str;
}


char* Java_com_app_fromJNI(JNIEnv *env)
{
	return (*env) -> NewStringUTF(env,"123456");
}

int main()
{
	// 构建 JNIEnv * 对象
	struct JNINativeInterface nativeInterface;
	// 结构体方法进行复制（实现）
	nativeInterface.NewStringUTF = NewStringUTF;

	JNIEnv env = &nativeInterface;	// 一级指针
	JNIEnv *jniEnv = &env;			// 二级指针

	// 将JNI对象传递给Java_com_app_fromJNI
 	char* jstring = Java_com_app_fromJNI(jniEnv);

	// jstring 通过JNIEnv传递给Java层
	printf("jstring = %s\n",jstring);

	exit(0);

}




